// typeOf, return 'array', 'object', 'function', 'null', 'undefined', 'string', 'number'
export function typeOf(input) {
  return ({}).toString.call(input).slice(8, -1).toLowerCase();
}

// 判断是否有值：全部都是空格或其他诸如tab的话，也作为无值看待
export function hasValue(val) {
  return val !== '' && val !== null && val !== undefined && !/^\s+$/.test(val);
}

/**
 * 判断变量是否空值
 * undefined, null, '', false, 0, [], {} 均返回true，否则返回false
 */
function empty(v) {
  switch (typeof v) {
    case 'undefined' :
      return true;
    case 'string'    :
      if (trim(v).length === 0) return true;
      break;
    case 'boolean'   :
      if (!v) return true;
      break;
    case 'number'    :
      if (0 === v) return true;
      break;
    case 'object'    :
      if (null === v) return true;
      if (undefined !== v.length && v.length === 0) return true;
      for (const k in v) {
        return false;
      }
      return true;
      break;
  }
  return false;
}

export function getHashParameter(key) {
  const params = getHashParameters();
  return params[key];
}

export function getHashParameters() {
  const arr = (location.hash || '').replace(/^#/, '').split('&');
  const params = {};
  for (let i = 0; i < arr.length; i++) {
    const data = arr[i].split('=');
    if (data.length === 2) {
      params[data[0]] = data[1];
    }
  }
  return params;
}
